package core.manager
{
	import core.CardItemObject;

	/**
	 * 规则的管理
	 */ 
	public class RuleManager
	{
		public function RuleManager()
		{
		}
		
		private static var _instance:RuleManager;
		
		public static function get instance():RuleManager {
			if(_instance == null){
				_instance = new RuleManager();
			}
			return _instance;
		}
		
		/**
		 * 是否是黑杰克
		 */ 
		public function isBlackJack(value:Array):Boolean {
			if(value == null){
				return false;
			}
			if(value.length == 2){
				return true;
			}
			return false;
		}
		
		public function canSplit(value:Array):Boolean {
			var result:Boolean;
			if(value.length == 2){
				var a:CardItemObject = value[0];
				var b:CardItemObject = value[1];
				result = a.equal(b);
			}
			return result;
		}
		
		/**
		 * 计算当前牌数的点数值
		 * 10 j q k 都为 10
		 * A 可以做为10,如果当前是13+A的话,那么是14
		 * 如果当前是11+A的话那么就是21点
		 * @param value
		 * @return 
		 */		
		private static const MAX_POINTS:int = 21;// 最大21点
		public function calculatePoint(value:Array):int {
			var result:int = 0;
			var object:CardItemObject;
			if(value.length == 1){// 如果是1的话,只获取这些相应的值就可以了
				object = value[0] as CardItemObject;
				result = object.value ;
			}else {
				var count:int = 0;// A的总数
				for(var i:int = 0; i < value.length; i++){
					object = value[i] as CardItemObject;
					if(object.isA){
						count++;
					}
					result += object.value;
				}// 先计算出来总的数值,并且判断这里面有多少个A
				if(result > MAX_POINTS){// 如果超过21点,并且有A的话,就减去10,因为A的值为1或者11,第一次默认的值是11,所以减去10即可
					while(count > 0){
						result -= 10;
						if(result <= MAX_POINTS){
							break;
						}else{
							count--;
						}
					}
				}
			}
			return result;
		}
	}
}